
/**********************************************************
 * File description:Constant.h
 * Function:定义系统中会用到的常量
 * Current Version: 1.0.0
 * Author: All
 * Date: 2022-10-01
 *  -----
 *  Copyright by bokun Software.
 **********************************************************/

#ifndef CONSTANT_H
#define CONSTANT_H

#include <QDebug>

//**********************************************************
//数据库相关常量


//异常以及信息异常状态码，状态码以10001开头，依次递增
#define DBFILE_NOT_EXISTS "数据库文件不存在,打开失败"
#define DBFILE_NOT_EXISTS_CODE "10001"

//数据库文件名称以及表名
#define DBNAME "bokun" //数据库文件名
#define DEVICE_TABLE "device" //设备管理表
#define EXPERIMENT_TABLE "experiment" //实验配置表
#define SAMPLE "sample" //样本信息表
#define CHROMOSOME "chromosome" //染料表
#define PROCEDURE_STAGE_TABLE "procedure_stage" //扩增程序阶段表
#define PROCEDURE_STEP_TABLE "procedure_step" //扩增程序步骤表
#define TARGET_TABLE "target" //靶基因数据表


//Sql语句常量
#define CAL_RUN_TIME "SELECT SUM(duration) time FROM procedure WHERE experiment_id = " //根据实验id获取运行时间
#define INSERT_STEP1 "UPDATE procedure_step SET step_order = step_order + 1 WHERE step_order >= " //扩增程序插入步骤需要执行的第一条sql语句
#define DELETE_STEP1 "UPDATE procedure_step SET step_order = step_order - 1 WHERE step_order >= " //扩增程序删除步骤需要执行的第二条sql语句
#define INSERT_STAGE1 "UPDATE procedure_stage SET stage_order = stage_order + 1 WHERE stage_order >= " //扩增程序插入阶段需要执行的第一条sql语句
#define DELETE_STAGE1 "UPDATE procedure_stage SET stage_order = stage_order - 1 WHERE stage_order >= " //扩增程序删除阶段需要执行的第一条sql语句
#define LATEST_EXPERIMENT_ID "SELECT * FROM experiment ORDER BY experiment_id DESC LIMIT 1" //获取实验信息表最新创建实验的信息
#define LATEST_STAGE_ID "SELECT * FROM procedure_stage ORDER BY id DESC LIMIT 1" //获取扩增程序阶段表最新阶段的信息
#define ALL_STAGE "SELECT * FROM procedure_stage WHERE experiment_id = " //获取指定实验的全部阶段信息
#define ALL_STEP "SELECT * FROM procedure_step WHERE stage_id = " //获取指定阶段的全部步骤信息
#define COUNT_STEPS "SELECT COUNT(*) cnt FROM procedure_step WHERE stage_id = " //获取指定阶段下的步骤数量


//**********************************************************
//文件读写相关常量


//异常信息以及异常状态码，状态码以20001开头，依次递增
#define FILE_NOT_EXISTS "文件不存在,打开失败"
#define FILE_NOT_EXISTS_CODE "20001"


//**********************************************************
//通信相关常量
#define SLEEP_TIME 2000 //向下位机发送请求后休眠时间


//异常信息以及异常状态码，状态码30001开头，依次递增


//**********************************************************
//系统相关常量

//异常信息以及异常状态码，状态码40001开头，依次递增

//**********************************************************
//扩增程序相关常量
#define RELATIVE_QUANTIFICATION_TYPE "相对定量" //相对定量实验类型
#define ABSOLUTE_QUANTIFICATION_TYPE "绝对定量" //绝对定量实验类型
#define DISSOLUTION_CURVE_TYPE "熔解曲线" //溶解曲线实验类型
#define DISSOLUTION_CURVE_STAGE "熔解曲线阶段"
#define HOLDING_STAGE "保温阶段"
#define PCR_STAGE "PCR阶段"

//**********************************************************
//配置文件相关常量
#define CONFIG_FILE_NAME "config.xml" //配置文件名

//**********************************************************
//运行相关常量
#define EXPERIMENT_RUNNING_SLEEP_TIME 300 // 运行时休眠等待时间
#define EXPERIMENT_THREAD_SLEEP_TIME 300 // 线程休眠锁
#define EXPERIMENT_RUNNING_TIMER_FREQUENCY 2000 // 运行时定时器频率

#define EXPERIMENT_RUNNING_SLEEP_TIMEB 10000 // 运行时休眠等待时间（测试）
#define EXPERIMENT_THREAD_SLEEP_TIMEB 10000 // 线程休眠锁（测试）

//***********************************************************
// 生产环境常量
#define IS_DEV false // 是否为生产环境：生产环境下，其被生产宏所修饰的代码均会被注释

#if IS_DEV == true // 生产环境
    #define DEV_ENV //
#else // 开发环境
    #define DEV_ENV
#endif

// qDebug
#define LOG_DETAIL_ON 1 // 是否展示详细信息(1-展示/0-不展示)

#if IS_DEV == true // 生产环境下，qDebug不可用
    #define LOG qDebug() // 开发环境，普通qDebug
#elif LOG_DETAIL_ON == 1 // 开发环境，详细qDebug
    #define LOG qDebug() << "[" << __FILE__ << ":" << __LINE__ << ":" << __func__ << "]" // LOG 详细信息
#else
    #define LOG qDebug() // 开发环境，普通qDebug
#endif

#endif // CONSTANT_H
